/**
 调用方法传参
 */

void main() {
  
//1、定义一个方法 求1到这个数的所有数的和      60    1+2+3+。。。+60
  int sumNum(int n) {
    var sum = 0;
    for(var i=0;i<=n;i++) {
      sum += i;
    }
    return sum;
  }
  var sum = sumNum(100);
  print(sum);


//2、定义一个方法然后打印用户信息
  String printUserInfo(String username, int age) { //形参
    return '姓名：$username---年龄：$age';
  }
  var str = printUserInfo('张三', 20);//实参
  print(str);


//3、定义一个带可选参数的方法
  String userInfo(String username, [int age]) { //形参
    if(age == null) {
      return '姓名：$username---年龄：保密';
    }
    return '姓名：$username---年龄：$age';
  }
  var str1 = userInfo('张三');//实参
  print(str1);


//4、定义一个带默认参数的方法
  String info(String username, [String sex='男', int age]) {
    if(age == null) {
      return '姓名：$username---性别：$sex---年龄：保密';
    }
    return '姓名：$username---性别：$sex---年龄：$age';
  }
  var str2 = info('貂蝉', '女', 18);
  print(str2);

//5、定义一个命名参数的方法
  String getInfo(String username, {int age, String sex='男'}) {
    if(age == null) {
      return '姓名：$username---性别：$sex---年龄：保密';
    }
    return '姓名：$username---性别：$sex---年龄：$age';
  }
  var str3 = getInfo('西施', age:18, sex:'女');
  print(str3);  


//6、实现一个 把方法当做参数的方法
  method1() { //方法1
    print('method1');
  }
  method2(methodName) { //方法2
    methodName();
  }
  method2(method1); //调用方法2，把方法1当做参数传入

  //匿名方法
  var fn = () {
    print('这是一个匿名方法');
  };
  fn();

}